home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Multiprocessing.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  3KB  |  134 lines

  1. /*
  2.      File:        Multiprocessing.h
  3.  
  4.      Contains:    Multiprocessing interfaces
  5.  
  6.      Version:    Technology:    System 8
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __MULTIPROCESSING__
  19. #define __MULTIPROCESSING__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __CODEFRAGMENTS__
  25. #include <CodeFragments.h>
  26. #endif
  27. #ifndef __KERNEL__
  28. #include <Kernel.h>
  29. #endif
  30. #ifndef __TIMING__
  31. #include <Timing.h>
  32. #endif
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. #if PRAGMA_IMPORT_SUPPORTED
  39. #pragma import on
  40. #endif
  41.  
  42. #if PRAGMA_ALIGN_SUPPORTED
  43. #pragma options align=power
  44. /* the following contents can only be used by compilers that support PowerPC struct alignment */
  45.  
  46. #if FOR_SYSTEM7_ONLY
  47. typedef struct OpaqueMPTaskID* MPTaskID;
  48. typedef struct OpaqueMPQueueID* MPQueueID;
  49. typedef UInt32 MPTaskOptions;
  50. typedef OSStatus (*TaskProc)(void *parameter);
  51.  
  52. enum {
  53.     kDurationImmediate            = 0L,
  54.     kDurationForever            = 0x7FFFFFFF
  55. };
  56.  
  57. #endif
  58. #if FOR_SYSTEM8_PREEMPTIVE
  59. typedef TaskID MPTaskID;
  60. typedef KernelQueueID MPQueueID;
  61. typedef TaskOptions MPTaskOptions;
  62. #endif
  63. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  64. typedef struct OpaqueMPSemaphoreID* MPSemaphoreID;
  65. typedef struct OpaqueMPCriticalRegionID* MPCriticalRegionID;
  66. typedef UInt32 MPSemaphoreCount;
  67.  
  68. enum {
  69.     kMPNoID                        = kInvalidID
  70. };
  71.  
  72. #endif
  73. #if FOR_SYSTEM7_AND_SYSTEM8_PREEMPTIVE
  74. #define MPLibraryIsLoaded() ((UInt32)MPCreateTask != (UInt32)kUnresolvedCFragSymbolAddress)
  75. extern UInt32 MPProcessors(void );
  76.  
  77. extern OSStatus MPCreateTask(TaskProc taskEntryPoint, void *taskParameter, ByteCount stackSize, MPQueueID notifyQ, void *notifyParameter1, void *notifyParameter2, MPTaskOptions options, MPTaskID *newTask);
  78.  
  79. extern OSStatus MPTerminateTask(MPTaskID task, OSStatus terminationStatus);
  80.  
  81. extern void MPExit(OSStatus terminationStatus);
  82.  
  83. extern MPTaskID MPCurrentTaskID(void );
  84.  
  85. extern void MPYield(void );
  86.  
  87. extern OSStatus MPCreateQueue(MPQueueID *queue);
  88.  
  89. extern OSStatus MPDeleteQueue(MPQueueID queue);
  90.  
  91. extern OSStatus MPNotifyQueue(MPQueueID queue, void *param1, void *param2, void *param3);
  92.  
  93. extern OSStatus MPWaitOnQueue(MPQueueID queue, void **param1, void **param2, void **param3, Duration timeout);
  94.  
  95. extern OSStatus MPCreateSemaphore(MPSemaphoreCount maxVal, MPSemaphoreCount initVal, MPSemaphoreID *semaphore);
  96.  
  97. extern OSStatus MPCreateBinarySemaphore(MPSemaphoreID *semaphore);
  98.  
  99. extern OSStatus MPWaitOnSemaphore(MPSemaphoreID semaphore, Duration timeout);
  100.  
  101. extern OSStatus MPSignalSemaphore(MPSemaphoreID semaphore);
  102.  
  103. extern OSStatus MPDeleteSemaphore(MPSemaphoreID semaphore);
  104.  
  105. extern OSStatus MPCreateCriticalRegion(MPCriticalRegionID *region);
  106.  
  107. extern OSStatus MPEnterCriticalRegion(MPCriticalRegionID region, Duration timeout);
  108.  
  109. extern OSStatus MPExitCriticalRegion(MPCriticalRegionID region);
  110.  
  111. extern OSStatus MPDeleteCriticalRegion(MPCriticalRegionID region);
  112.  
  113. extern LogicalAddress MPAllocate(ByteCount size);
  114.  
  115. extern void MPFree(LogicalAddress block);
  116.  
  117. extern void MPBlockCopy(LogicalAddress sourcePtr, LogicalAddress destPtr, ByteCount bytes);
  118.  
  119. #endif
  120.  
  121. #pragma options align=reset
  122. #endif /* PRAGMA_ALIGN_SUPPORTED */
  123.  
  124. #if PRAGMA_IMPORT_SUPPORTED
  125. #pragma import off
  126. #endif
  127.  
  128. #ifdef __cplusplus
  129. }
  130. #endif
  131.  
  132. #endif /* __MULTIPROCESSING__ */
  133.  
  134.